package com.ruoyi.pos.service.cashier;

import com.ruoyi.pos.domain.cashier.PosCashier;
import com.ruoyi.pos.domain.dto.cashier.request.CashierLoginRequest;
import com.ruoyi.pos.domain.dto.cashier.request.PasswordChangeRequest;
import com.ruoyi.pos.domain.dto.cashier.response.CashierLoginResponse;
import com.ruoyi.pos.domain.dto.cashier.response.PasswordChangeResponse;

import java.util.List;

/**
 * POS收银员Service接口
 * 
 * @author ruoyi
 * @date 2025-01-30
 */
public interface IPosCashierService {

    // ==================== 业务方法 ====================

    /**
     * 收银员登录
     * 
     * @param request 登录请求
     * @return 登录响应
     */
    CashierLoginResponse cashierLogin(CashierLoginRequest request);

    /**
     * 收银员登出
     * 
     * @param cashierId 收银员ID
     * @param deviceId 设备ID
     * @return 是否成功
     */
    boolean cashierLogout(Long cashierId, Long deviceId);

    /**
     * 切换收银员
     * 
     * @param oldCashierId 原收银员ID
     * @param newCashierId 新收银员ID
     * @param deviceId 设备ID
     * @return 是否成功
     */
    boolean switchCashier(Long oldCashierId, Long newCashierId, Long deviceId);

    /**
     * 获取当前收银员信息
     * 
     * @param deviceId 设备ID
     * @return 收银员信息
     */
    CashierLoginResponse getCurrentCashier(Long deviceId);

    /**
     * 验证收银员设备权限
     * 
     * @param cashierId 收银员ID
     * @param deviceId 设备ID
     * @return 是否有权限
     */
    boolean checkCashierDevicePermission(Long cashierId, Long deviceId);

    /**
     * 验证收银员柜组权限
     * 
     * @param cashierId 收银员ID
     * @param groupId 柜组ID
     * @return 是否有权限
     */
    boolean checkCashierGroupPermission(Long cashierId, Long groupId);

    /**
     * 修改收银员密码
     * 
     * @param request 密码修改请求
     * @return 密码修改响应
     */
    PasswordChangeResponse changePassword(PasswordChangeRequest request);

    // ==================== CRUD方法 ====================

    /**
     * 查询POS收银员列表
     * 
     * @param posCashier POS收银员
     * @return POS收银员集合
     */
    List<PosCashier> selectPosCashierList(PosCashier posCashier);

    /**
     * 根据收银员ID查询POS收银员
     * 
     * @param cashierId 收银员ID
     * @return POS收银员
     */
    PosCashier selectPosCashierByCashierId(Long cashierId);

    /**
     * 新增POS收银员
     * 
     * @param posCashier POS收银员
     * @return 结果
     */
    int insertPosCashier(PosCashier posCashier);

    /**
     * 修改POS收银员
     * 
     * @param posCashier POS收银员
     * @return 结果
     */
    int updatePosCashier(PosCashier posCashier);

    /**
     * 批量删除POS收银员
     * 
     * @param cashierIds 需要删除的POS收银员主键集合
     * @return 结果
     */
    int deletePosCashierByCashierIds(Long[] cashierIds);
}
